﻿
namespace IronLua.Ast {

	public interface ILuaAstVisitor {

		void VisitBlockStatement (BlockStatement node);
		void VisitDoStatement (DoStatement node);
		void VisitWhileStatement (WhileStatement node);
		void VisitRepeatStatement (RepeatStatement node);
		void VisitIfStatement (IfStatement node);
		void VisitExpressionStatement (ExpressionStatement node);
		void VisitReturnStatement (ReturnStatement node);
		void VisitBreakStatement (BreakStatement node);
		void VisitCommentStatement (CommentStatement node);
		void VisitAssignStatement (AssignStatement node);
		void VisitForStatement (ForStatement node);
		void VisitForEachStatement (ForEachStatement node);
		void VisitFunctionStatement (FunctionStatement node);
		void VisitMethodStatement (MethodStatement node);
		void VisitLocalStatement (LocalStatement node);
		void VisitLocalFunctionStatement (LocalFunctionStatement node);

		void VisitUnaryExpression (UnaryExpression node);
		void VisitBinaryExpression (BinaryExpression node);
		void VisitLiteralExpression (LiteralExpression node);
		void VisitTableCreationExpression (TableCreationExpression node);
		void VisitVariableExpression (VariableExpression node);
		void VisitFunctionExpression (FunctionExpression node);
		void VisitSlotExpression (SlotExpression node);
		void VisitFunctionCallExpression (FunctionCallExpression node);
		void VisitMethodCallExpression (MethodCallExpression node);
		void VisitMemberExpression (MemberExpression node);
		void VisitVarArgExpression (VarArgExpression node);

		void VisitElseIfClause (ElseIfClause node);
	}
}
